﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using produccion.reportes;
using System.Windows.Controls.Primitives;
using System.Threading;
using System.Globalization;
using System.Collections;
using System.IO;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FrmInformePendientesPorProgramar.xaml
    /// </summary>
    public partial class FrmInformePendientesPorProgramar : Window
    {
        #region FJRF - VARIABLES DEL MODULO
        MDOgeneral MdoGeneral = new MDOgeneral();//FJRF - Traemos toda la informacion y funciones de MdoGeneral

        DataTable DtEncabezadoYParametros;//FJRF - Usamos este DataTable para hacer consultas generales del os encabezados mas los parametros
        DataSet DsImprimir;//FJRF - Usamos este dataset para la impresion de consultas

        DataTable DtConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        DataTable DtImprimir;//FJRF - Usamos este DataTable para hacer consultas generales
        DataSet DsConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        String StrConsulta;//FJRF - Usamos este DataTable para hacer consultas generales

        DateTime DttFecha;//FJRF - Variable para manejar la fecha del sistema

        DataTable DtPendientesPorProgramar;//FJRF - Para la entrada de materiales
        DataTable DtDetalle;//FJRF - Para la entrada de materiales en el detalle

        DataTable DtColores;//FJRF - Para la colores

        String StrSelecciondoSepararClientes = "N";
        String StrSelecciondoSepararPedidos = "N";

        String StrVerCalzado = "S";
        String StrVerAccesorios = "N";
        String StrVerCalzadoOAccesorios = "C-";

        String StrColores = "";//FJRF - Los colores seleccionados

        //String StrRutaReporteCrystalReport = @"C:\produccion\produccion\reportes\";//FJRF - Esta es la ruta de los reportes de crystal reports
        String StrRutaReporteCrystalReport = @"reportes\";//FJRF - Esta es la ruta de los reportes de crystal reports

        #endregion

        #region FJRF - EVENTOS DEL FORMULARIO
        public FrmInformePendientesPorProgramar()
        {
            InitializeComponent();
        }
        private void WinFrmInformePendientesPorProgramar_Loaded(object sender, RoutedEventArgs e)
        {
            #region FJRF - Cargamos las fechas iniciales
            //FJRF - CON ESTO GARANTIZAMOS QUE LAS FECHAS SIEMPRE VENDRAN EN ESTE FORMATO DE DIA/MES/AÑO
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");//FJRF - Con esto aseguramos que la base de datos reciba los numeros como se deben recibir
            Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
            Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

            DttFecha = DateTime.Now;//FJRF - Establecemos la fecha actual
            DtpFechaInicial.SelectedDate = new DateTime(DttFecha.Year, 1, 1);//FJRF - Obtenemos el primer dia del mes
            DtpFechaFinal.SelectedDate = new DateTime(DttFecha.Year, 12, 31); ;//FJRF - Obtenemos el ultimo dia del mes
            #endregion

            StrConsulta = "SELECT UPPER(CODCLI_CLI) as CodigoCliente,  UPPER(NOMCLI_CLI) as NombreCliente FROM MAECLIP order by NOMCLI_CLI";//FJRF - Cargamos los clientes
            CargarCombo(CboCodigoCliente, StrConsulta, "CodigoCliente", "CodigoCliente", "Codigo");//FJRF - Cargamos el codigo
            CargarCombo(CboNombreCliente, StrConsulta, "CodigoCliente", "NombreCliente", "Nombre");//FJRF - Cargamos el nombre
        }
        private void DtgColor_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            #region FJRF - Saber Fila y Columna indexada

            int IntColumnaIndexada, IntFilaIndexada;
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            //Stepping through the visual tree
            while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            //Is the dep a cell or outside the bounds of Window1?
            if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
            {
                return;
            }
            else
            {
                System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                cell = (System.Windows.Controls.DataGridCell)dep;
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                if (dep == null)
                {
                    return;
                }
                int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                IntColumnaIndexada = colindex;

                DataGridRow row = dep as DataGridRow;
                System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                IntFilaIndexada = rowindex;
            }
            #endregion

            int IntColumnaImagen = DtgColor.Columns.Count - 1;//FJRF - Esta es la columnas de las imagenes
            int IntColumnaSeleccionado = DtgColor.Columns.Count - 2;//FJRF - Esta es la columnas que nos dice si esta o no seleccionado

            if (IntColumnaIndexada == IntColumnaImagen)//FJRF - Si la columnas es la que tiene el chek hacemos lo siguiente
            {
                String StrSeleccionado = DtColores.Rows[IntFilaIndexada][IntColumnaSeleccionado].ToString();//FJRF - Convertimos el objeto en algo manipulable
                if (StrSeleccionado == "SI")//FJRF - Si esta seleccionado hacemos lo siguiente
                {
                    DtColores.Rows[IntFilaIndexada][IntColumnaSeleccionado] = "NO";//FJRF - Quitamos la seleccion
                    DtColores.Rows[IntFilaIndexada][IntColumnaImagen] = "/produccion;component/Images/ImagenTrasparente.png";//FJRF - Ponemos una imagen trasparente

                    CkbSeleccionarTodo.IsChecked = false;//FJRF - Quitamos la seleccion de todos en el seleccionador
                }
                if (StrSeleccionado == "NO")//FJRF - Si no esta seleccionado hacemos lo siguiente
                {
                    DtColores.Rows[IntFilaIndexada][IntColumnaSeleccionado] = "SI";//FJRF - Seleccionamos
                    DtColores.Rows[IntFilaIndexada][IntColumnaImagen] = "/produccion;component/Images/ok1.png";//FJRF - Ponemos una imagen de seleccion
                }

                String StrColorSeleccionado = DtColores.Rows[IntFilaIndexada][0].ToString();//FJRF - Seleccionamos el color
                PonerImagen(TxtCodigoReferencia.Text.Trim(), StrColorSeleccionado, LblTituloNombreReferencia.Content.ToString());//FJRF - Buscamos la imagen
            }
        }
        private void CkbVerCalzado_Click(object sender, RoutedEventArgs e)
        {
            if (CkbVerCalzado.IsChecked == true)//FJRF - Si la columnas es la que tiene el chek hacemos lo siguiente
            {
                StrVerCalzado = "S";
            }
            else
            {
                StrVerCalzado = "N";
            }
            if (StrVerAccesorios == "S" && StrVerCalzado == "N")
            {
                StrVerCalzadoOAccesorios = "A-";
            }
            if (StrVerAccesorios == "S" && StrVerCalzado == "S")
            {
                StrVerCalzadoOAccesorios = "C-A-";
            }
            if (StrVerAccesorios == "N" && StrVerCalzado == "S")
            {
                StrVerCalzadoOAccesorios = "C-";
            }
            if (StrVerAccesorios == "N" && StrVerCalzado == "N")
            {
                StrVerCalzadoOAccesorios = "";
            }
            PttV_LimpiarGrids();//Limpiamos los dos grid
        }
        private void CkbVerAccesorios_Click(object sender, RoutedEventArgs e)
        {
            if (CkbVerAccesorios.IsChecked == true)//FJRF - Si la columnas es la que tiene el chek hacemos lo siguiente
            {
                StrVerAccesorios = "S";
            }
            else
            {
                StrVerAccesorios = "N";
            }
            if(StrVerAccesorios == "S" && StrVerCalzado == "N")
            {
                StrVerCalzadoOAccesorios = "A-";
            }
            if (StrVerAccesorios == "S" && StrVerCalzado == "S")
            {
                StrVerCalzadoOAccesorios = "C-A-";
            }
            if (StrVerAccesorios == "N" && StrVerCalzado == "S")
            {
                StrVerCalzadoOAccesorios = "C-";
            }
            if (StrVerAccesorios == "N" && StrVerCalzado == "N")
            {
                StrVerCalzadoOAccesorios = "";
            }
            PttV_LimpiarGrids();//Limpiamos los dos grid
        }
        private void CkbSeleccionarTodo_Click(object sender, RoutedEventArgs e)
        {
            int IntColumnaImagen = DtgColor.Columns.Count - 1;//FJRF - Esta es la columnas de las imagenes
            int IntColumnaSeleccionado = DtgColor.Columns.Count - 2;//FJRF - Esta es la columnas que nos dice si esta o no seleccionado

            int IntFilaIndexada = 0;//FJRF - Creamos la columna que manejara las filas
            foreach (DataRow row in DtColores.Rows)
            {
                if (CkbSeleccionarTodo.IsChecked == true)//FJRF - Si la columnas es la que tiene el chek hacemos lo siguiente
                {
                    DtColores.Rows[IntFilaIndexada][IntColumnaSeleccionado] = "SI";//FJRF - Seleccionamos
                    DtColores.Rows[IntFilaIndexada][IntColumnaImagen] = "/produccion;component/Images/ok1.png";//FJRF - Ponemos una imagen de seleccion
                }
                else//FJRF - Si no esta seleccionado hacemos lo siguiente
                {
                    DtColores.Rows[IntFilaIndexada][IntColumnaSeleccionado] = "NO";//FJRF - Quitamos la seleccion
                    DtColores.Rows[IntFilaIndexada][IntColumnaImagen] = "/produccion;component/Images/ImagenTrasparente.png";//FJRF - Ponemos una imagen trasparente
                }
                IntFilaIndexada++;//FJRF - Aumentamos el contador de lineas
            }
        }
        private void CkbSepararClientes_Click(object sender, RoutedEventArgs e)
        {
            if (CkbSepararClientes.IsChecked == true)//FJRF - Si esta seleccionado hacemos lo siguiente
            {
                StrSelecciondoSepararClientes = "S";//FJRF - Enviamos una [S]
            }
            else//FJRF - Si no esta seleccionado hacemos lo siguiente
            {
                StrSelecciondoSepararClientes = "N";//FJRF - Enviamos una [N]
            }
            PttV_LimpiarGrids();//Limpiamos los dos grid
        }
        private void CkbSepararPedidos_Click(object sender, RoutedEventArgs e)
        {
            if (CkbSepararPedidos.IsChecked == true)//FJRF - Si esta seleccionado hacemos lo siguiente
            {
                StrSelecciondoSepararPedidos = "S";//FJRF - Enviamos una [S]
            }
            else//FJRF - Si no esta seleccionado hacemos lo siguiente
            {
                StrSelecciondoSepararPedidos = "N";//FJRF - Enviamos una [N]
            }
            PttV_LimpiarGrids();//Limpiamos los dos grid
        }
        private void DtgPendientesPorProgramar_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
            strNombreColumna = e.Column.Header.ToString();//FJRF - Extraemos el nombre de la columna

            if (strNombreColumna == "PEDIDO" || strNombreColumna == "POR__PRG" || strNombreColumna == "POR__COR" || strNombreColumna == "POR__PRP" || strNombreColumna == "POR__GUA" || strNombreColumna == "POR__MON" || strNombreColumna == "POR__DES")//FJRF - Si alguna de las columnas tiene este nombre hacemos lo siguiente
            {
                Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
                MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

                (e.Column as DataGridTextColumn).Binding.StringFormat = "{0:##,#0.##}";//FJRF - Enviamos el formato a la celda
                (e.Column as DataGridTextColumn).CellStyle = MyStyleTextAlignmentProperty;//FJRF - Asignamos el estilo creado
            }
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }
        private void DtgPendientesPorProgramar_KeyUp(object sender, KeyEventArgs e)
        {
            #region FJRF - Saber Fila y Columna indexada

            int IntColumnaIndexada, IntFilaIndexada;
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            //Stepping through the visual tree
            while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            //Is the dep a cell or outside the bounds of Window1?
            if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
            {
                return;
            }
            else
            {
                System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                cell = (System.Windows.Controls.DataGridCell)dep;
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                if (dep == null)
                {
                    return;
                }
                int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                IntColumnaIndexada = colindex;

                DataGridRow row = dep as DataGridRow;
                System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                IntFilaIndexada = rowindex;
            }
            #endregion

            DataRowView DrwDatosDelGrid = DtgPendientesPorProgramar.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
            DataRow DrFilaDelGrid = DrwDatosDelGrid.Row;//FJRF - Asignamos las finas

            String StrCodigoCliente = Convert.ToString(DrFilaDelGrid.ItemArray[0]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            String StrNombreCliente = Convert.ToString(DrFilaDelGrid.ItemArray[1]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrCodigoReferencia = Convert.ToString(DrFilaDelGrid.ItemArray[2]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            String StrNombreReferencia = Convert.ToString(DrFilaDelGrid.ItemArray[3]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrCodigoColor = Convert.ToString(DrFilaDelGrid.ItemArray[4]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            String StrNombreColor = Convert.ToString(DrFilaDelGrid.ItemArray[5]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrNroPedido = Convert.ToString(DrFilaDelGrid.ItemArray[6]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrNombreCompleto = StrNombreCliente + " - " + StrNombreColor;//FJRF - Armamos el nombre completo
            PonerImagen(StrCodigoReferencia, StrCodigoColor, StrNombreCompleto);//FJRF - Buscamos la imagen

            PttV_BuscarDetalleDatoSeleccionado(StrNroPedido, StrCodigoCliente, StrCodigoCliente + " - " + StrNombreCliente, StrCodigoReferencia, StrCodigoReferencia + StrCodigoColor + " - " + StrNombreReferencia + " - " + StrNombreColor, StrCodigoColor, IntFilaIndexada, IntColumnaIndexada);//FJRF - Buscamos los datos
        }
        private void DtgPendientesPorProgramar_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            #region FJRF - Saber Fila y Columna indexada

            int IntColumnaIndexada, IntFilaIndexada;
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            //Stepping through the visual tree
            while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            //Is the dep a cell or outside the bounds of Window1?
            if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
            {
                return;
            }
            else
            {
                System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                cell = (System.Windows.Controls.DataGridCell)dep;
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                if (dep == null)
                {
                    return;
                }
                int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                IntColumnaIndexada = colindex;

                DataGridRow row = dep as DataGridRow;
                System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                IntFilaIndexada = rowindex;
            }
            #endregion

            DataRowView DrwDatosDelGrid = DtgPendientesPorProgramar.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
            DataRow DrFilaDelGrid = DrwDatosDelGrid.Row;//FJRF - Asignamos las finas

            String StrCodigoCliente = Convert.ToString(DrFilaDelGrid.ItemArray[0]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            String StrNombreCliente = Convert.ToString(DrFilaDelGrid.ItemArray[1]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrCodigoReferencia = Convert.ToString(DrFilaDelGrid.ItemArray[2]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            String StrNombreReferencia = Convert.ToString(DrFilaDelGrid.ItemArray[3]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrCodigoColor = Convert.ToString(DrFilaDelGrid.ItemArray[4]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            String StrNombreColor = Convert.ToString(DrFilaDelGrid.ItemArray[5]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrNroPedido = Convert.ToString(DrFilaDelGrid.ItemArray[6]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            String StrNombreCompleto = StrNombreCliente + " - " + StrNombreColor;//FJRF - Armamos el nombre completo
            PonerImagen(StrCodigoReferencia, StrCodigoColor, StrNombreCompleto);//FJRF - Buscamos la imagen

            PttV_BuscarDetalleDatoSeleccionado(StrNroPedido, StrCodigoCliente, StrCodigoCliente + " - " + StrNombreCliente, StrCodigoReferencia, StrCodigoReferencia + StrCodigoColor + " - " + StrNombreReferencia + " - " + StrNombreColor, StrCodigoColor, IntFilaIndexada, IntColumnaIndexada);//FJRF - Buscamos los datos
        }
        private void DtgPendientesPorProgramar_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (CkbSepararPedidos.IsChecked == true)//FJRF - Si separar pedidos esta activo hacemos lo siguiente
            {
                #region FJRF - Saber Fila y Columna indexada

                int IntColumnaIndexada, IntFilaIndexada;
                DependencyObject dep = (DependencyObject)e.OriginalSource;

                //Stepping through the visual tree
                while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                //Is the dep a cell or outside the bounds of Window1?
                if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
                {
                    return;
                }
                else
                {
                    System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                    cell = (System.Windows.Controls.DataGridCell)dep;
                    while ((dep != null) && !(dep is DataGridRow))
                    {
                        dep = VisualTreeHelper.GetParent(dep);
                    }

                    if (dep == null)
                    {
                        return;
                    }
                    int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                    IntColumnaIndexada = colindex;

                    DataGridRow row = dep as DataGridRow;
                    System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                    int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                    IntFilaIndexada = rowindex;
                }
                #endregion

                DataRowView DrwDatosDelGrid = DtgPendientesPorProgramar.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
                DataRow DrFilaDelGrid = DrwDatosDelGrid.Row;//FJRF - Asignamos las finas

                String StrCodigoCliente = Convert.ToString(DrFilaDelGrid.ItemArray[0]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
                String StrNombreCliente = Convert.ToString(DrFilaDelGrid.ItemArray[1]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

                String StrCodigoReferencia = Convert.ToString(DrFilaDelGrid.ItemArray[2]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
                String StrNombreReferencia = Convert.ToString(DrFilaDelGrid.ItemArray[3]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

                String StrCodigoColor = Convert.ToString(DrFilaDelGrid.ItemArray[4]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
                String StrNombreColor = Convert.ToString(DrFilaDelGrid.ItemArray[5]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

                String StrNroPedido = Convert.ToString(DrFilaDelGrid.ItemArray[6]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

                String StrNombreCompleto = StrNombreCliente + " - " + StrNombreColor;//FJRF - Armamos el nombre completo
                PonerImagen(StrCodigoReferencia, StrCodigoColor, StrNombreCompleto);//FJRF - Buscamos la imagen

                FrmEstadoDeUnPedidoEnProduccion FrmEstadoPedido = new FrmEstadoDeUnPedidoEnProduccion();//FJRF - Inatanciamos el formulario de estado de un pedido
                FrmEstadoPedido.TxtPedido.Text = StrNroPedido;//FJRF - Enviamos el numero del pedido
                FrmEstadoPedido.PubV_Procesar();//FJRF - Procesamos los datos
                FrmEstadoPedido.ShowDialog();//FJRF - Mostramos los datos procesados
            }
        }
        private void BtnBuscarReferencia_Click(object sender, RoutedEventArgs e)
        {
            PttV_BuscarReferencia();//FJRF - Buscamos la referencia
        }
        private void CboCodigoCliente_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            CboNombreCliente.SelectedIndex = CboCodigoCliente.SelectedIndex;//FJRF - Se iguala el codigo al nombre
            PttV_LimpiarGrids();//Limpiamos los dos grid
        }
        private void CboNombreCliente_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            CboCodigoCliente.SelectedIndex = CboNombreCliente.SelectedIndex;//FJRF - Se iguala el nombre al codigo
            PttV_LimpiarGrids();//Limpiamos los dos grid
        }
        private void BtnProcesar_Click(object sender, RoutedEventArgs e)
        {
            PttV_Procesar();//FJRF - Procesamos los datos
        }
        private void BtnExportarExcel_Click(object sender, RoutedEventArgs e)
        {
            if (DtPendientesPorProgramar != null)//FJRF - Si no esta nulo hacemos lo siguiente
            {
                if (DtPendientesPorProgramar.Rows.Count > 0)//FJRF - Si tiene datos hacemos lo siguiente
                {
                    FrmAyudasGenericas FrmAyudas = new FrmAyudasGenericas();//FJRF - Creamos una variable que maneje las propiedades del formulario que vamos a invocar
                    FrmAyudas.pStrTituloVentana_Opcional = "INFORME PENDIENTES POR PROGRAMAR";//FJRF - Le enviamos un titulo personalizado al formulario

                    FrmAyudas.pDtDatosRecibidosConInformacion = DtPendientesPorProgramar.Copy();
                    FrmAyudas.pStrCampoCodigoDeLaTabla_Obligatorio = "CODIGOREFERENCIA";//FJRF - Le decimos que este es el campo codigo o llave debe tener el nombre final osea el alias si es q lo tiene
                    FrmAyudas.pStrBuscarPorDefectoEnElCampo_Opcional = "REFERENCIA";//FJRF - Asignamos el dato a buscar
                    FrmAyudas.pBooQuitarBotonRetornar_Opcional = true;//FJRF - Quitamos el boton de retornar datos
                    FrmAyudas.pBooPonerBotonExportarExcel_Opcional = true;//FJRF - Activamos el boton para que se le permita la exportacion de datos a excel

                    String StrColumnasParaFormato = "PEDIDO,  POR__PRG, POR__COR, POR__PRP, POR__GUA, POR__MON, POR__DES ";//FJRF - Columnas para formato numerico
                    FrmAyudas.pStrNombreColumnasParaFormatoNumericoSeparadoPorComas_Opcional = StrColumnasParaFormato;//FJRF - Enviamos las columnas que se le van a hacer formato numerico

                    FrmAyudas.ShowDialog();//FJRF - Invocamos el formulario
                }
                else//FJRF - Si no tiene datos hacemos lo siguiente
                {
                    MessageBox.Show("No hay datos para exportar a Excel", "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                }
            }
            else//FJRF - Si esta nulo hacemos lo siguiente
            {
                MessageBox.Show("No hay datos para exportar a Excel", "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
            }
        }
        private void BtnImprimir_Click(object sender, RoutedEventArgs e)
        {
            PttV_Imprimir();//FJRF - Imprimimos los datos
        }
        private void BtnSalir_Click(object sender, RoutedEventArgs e)
        {
            PttV_Salir();//FJRF - Imprimimos el detalle
        }
        #endregion
        
        #region PROCEDIMIENTOS Y FUNCIONES
        protected void PttV_LimpiarGrids()
        {
            LblPedidos.Content = 0;//FJRF - Enviamos un cero
            LblPorProgramar.Content = 0;//FJRF - Enviamos un cero
            LblPorCortar.Content = 0;//FJRF - Enviamos un cero
            LblPorPreparacion.Content = 0;//FJRF - Enviamos un cero
            LblPorGuarnecer.Content = 0;//FJRF - Enviamos un cero
            LblPorMontar.Content = 0;//FJRF - Enviamos un cero
            LblPorDespachar.Content = 0;//FJRF - Enviamos un cero

            DtgPendientesPorProgramar.ItemsSource = null;//FJRF - Desvinculamos el objeto
            DtgPendientesPorProgramar.Items.Clear();//FJRF - limpiamos el grid
            DtPendientesPorProgramar = null;//FJRF - Quitamos los datos de la tabla

            DtgDetalle.ItemsSource = null;//FJRF - Desvinculamos el objeto
            DtgDetalle.Items.Clear();//FJRF - limpiamos el grid
            DtDetalle = null;//FJRF - Quitamos los datos de la tabla

            LblTituloDetalleSeleccionado.Content = " SELECCIONE UN DATO EN EL GRID DE ARRIBA PARA MOSTRAR EL DETALLE";//FJRF - Ponemos un mensaje en el titulo del detalle

            imgFoto.Source = null;//FJRF - Quitamos la imagen
        }
        protected void PttV_Procesar()
        {
            Mouse.OverrideCursor = Cursors.Wait;//FJRF - Pone el cursor en modo de espera

            PttV_LimpiarGrids();//Limpiamos los dos grid

            #region FJRF - CARGAMOS LA VARIABLES
            String StrClienteInicial = "   ", StrClienteFinal = "zzz", StrReferenciaInicial = "    ", StrReferenciaFinal = "zzzz", StrColorInicial = "  ", StrColorFinal = "zz";
            DateTime DttFechaDesde = DtpFechaInicial.SelectedDate.Value;
            DateTime DttFechaHasta = DtpFechaFinal.SelectedDate.Value;

            if (CboCodigoCliente.Text == "TODOS")//FJRF - Si esta seleccionado todos hacemos lo siguiente
            {
                StrClienteInicial = "   ";//FJRF - Enviamos tres espacios en blanco
                StrClienteFinal = "zzz";//FJRF - Enviamos tres z
            }
            else//FJRF - Si hay un dato seleccionado hacemos lo siguiente
            {
                StrClienteInicial = CboCodigoCliente.Text;//FJRF - Enviamos el dato seleccionado
                StrClienteFinal = CboCodigoCliente.Text;//FJRF - Enviamos el dato seleccionado
            }

            String StrNombreReferencia = LblTituloNombreReferencia.Content.ToString();
            if (TxtCodigoReferencia.Text.Trim().Length == 4 && StrNombreReferencia.Length > 1)//FJRF - Si esta seleccionado todos hacemos lo siguiente
            {
                StrReferenciaInicial = TxtCodigoReferencia.Text.Trim();//FJRF - Enviamos el dato seleccionado
                StrReferenciaFinal = TxtCodigoReferencia.Text.Trim();//FJRF - Enviamos el dato seleccionado
            }
            else//FJRF - Si hay un dato seleccionado hacemos lo siguiente
            {
                StrReferenciaInicial = "    ";//FJRF - Enviamos tres espacios en blanco
                StrReferenciaFinal = "zzzz";//FJRF - Enviamos tres z
            }

            String StrColoresSeleccionados = "";
            int IntColumnaSeleccionado = DtgColor.Columns.Count - 2;//FJRF - Esta es la columnas que nos dice si esta o no seleccionado
            int IntFilaIndexada = 0;//FJRF - Creamos la columna que manejara las filas

            if (DtColores != null)
            {
                foreach (DataRow row in DtColores.Rows)
                {
                    String StrSeleccionadoColor = DtColores.Rows[IntFilaIndexada][IntColumnaSeleccionado].ToString();//FJRF - Miramos si esta seleccionado el color

                    if (StrSeleccionadoColor == "SI")//FJRF - Si la columnas es la que tiene el chek hacemos lo siguiente
                    {
                        StrColoresSeleccionados = StrColoresSeleccionados + DtColores.Rows[IntFilaIndexada][0].ToString() + "-";//FJRF - Seleccionamos
                    }
                    IntFilaIndexada++;//FJRF - Aumentamos el contador de lineas
                }
            }

            if (StrColoresSeleccionados == "")//FJRF - Si esta seleccionado todos hacemos lo siguiente
            {
                StrColorInicial = "  ";//FJRF - Enviamos tres espacios en blanco
                StrColorFinal = "zz";//FJRF - Enviamos tres z
            }
            else//FJRF - Si hay un dato seleccionado hacemos lo siguiente
            {
                StrColorInicial = StrColoresSeleccionados;//FJRF - Enviamos el dato seleccionado
                StrColorFinal = StrColoresSeleccionados;//FJRF - Enviamos el dato seleccionado
            }

            StrColores = StrColorInicial;//FJRF - Colres seleccionados para impresion (CrystalReport)
            #endregion

            Ejecutar_SP_INFPENPRG(StrClienteInicial, StrClienteFinal, StrReferenciaInicial, StrReferenciaFinal, StrColorInicial, StrColorFinal, DttFechaDesde.ToShortDateString().Replace("/", ""), DttFechaHasta.ToShortDateString().Replace("/", ""), StrSelecciondoSepararClientes, StrSelecciondoSepararPedidos, StrVerCalzadoOAccesorios);
            
            StrConsulta = "SELECT ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "CODCLI_TMP AS CODIGOCLIENTE,  NOMCLI_TMP AS CLIENTE, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "CODREF_TMP AS CODIGOREFERENCIA,  NOMREF_TMP AS REFERENCIA, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "CODCOL_TMP AS CODIGOCOLOR,  NOMCOL_TMP AS COLOR, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "NROPED_TMP AS NROPEDIDO, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "CANPED_TMP AS PEDIDO, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "PORPRG_TMP AS POR__PRG, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "PORCOR_TMP AS POR__COR, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "PORPRP_TMP AS POR__PRP, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "PORGUA_TMP AS POR__GUA, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "PORMON_TMP AS POR__MON, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "PORDES_TMP AS POR__DES ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "FROM TMPINFPENPRG ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "ORDER BY ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "NOMCLI_TMP, NOMREF_TMP, NOMCOL_TMP, NROPED_TMP ";//FJRF - Armamos la consulta

            DtPendientesPorProgramar = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos
            DtgPendientesPorProgramar.ItemsSource = DtPendientesPorProgramar.DefaultView;//FJRF - Cargamos los datos encontrados

            StrConsulta = "SELECT ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(CANPED_TMP) AS PEDIDO, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(PORPRG_TMP) AS POR__PRG, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(PORCOR_TMP) AS POR__COR, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(PORPRP_TMP) AS POR__PRP, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(PORGUA_TMP) AS POR__GUA, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(PORMON_TMP) AS POR__MON, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "SUM(PORDES_TMP) AS POR__DES ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "FROM TMPINFPENPRG ";//FJRF - Armamos la consulta

            DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos
            
            if (DtConsulta.Rows.Count > 0)//FJRF - Si hay datos hacemos lo siguiente
            {
                LblPedidos.Content = DtConsulta.Rows[0][0];//FJRF - Enviamos los datos encontrados
                LblPedidos.ContentStringFormat = "{0:##,#0.##}";

                LblPorProgramar.Content = DtConsulta.Rows[0][1];//FJRF - Enviamos los datos encontrados
                LblPorProgramar.ContentStringFormat = "{0:##,#0.##}";

                LblPorCortar.Content = DtConsulta.Rows[0][2];//FJRF - Enviamos los datos encontrados
                LblPorCortar.ContentStringFormat = "{0:##,#0.##}";

                LblPorPreparacion.Content = DtConsulta.Rows[0][3];//FJRF - Enviamos los datos encontrados
                LblPorPreparacion.ContentStringFormat = "{0:##,#0.##}";

                LblPorGuarnecer.Content = DtConsulta.Rows[0][4];//FJRF - Enviamos los datos encontrados
                LblPorGuarnecer.ContentStringFormat = "{0:##,#0.##}";

                LblPorMontar.Content = DtConsulta.Rows[0][5];//FJRF - Enviamos los datos encontrados
                LblPorMontar.ContentStringFormat = "{0:##,#0.##}";

                LblPorDespachar.Content = DtConsulta.Rows[0][6];//FJRF - Enviamos los datos encontrados
                LblPorDespachar.ContentStringFormat = "{0:##,#0.##}";
            }
            else//FJRF - Si no hay datos hacemos lo siguiente
            {
                LblPedidos.Content = 0;//FJRF - Enviamos un cero
                LblPorProgramar.Content = 0;//FJRF - Enviamos un cero
                LblPorCortar.Content = 0;//FJRF - Enviamos un cero
                LblPorPreparacion.Content = 0;//FJRF - Enviamos un cero
                LblPorGuarnecer.Content = 0;//FJRF - Enviamos un cero
                LblPorMontar.Content = 0;//FJRF - Enviamos un cero
                LblPorDespachar.Content = 0;//FJRF - Enviamos un cero
            }

            #region FJRF - Quitamos o aparecemos columnas
            if (DtPendientesPorProgramar != null)//FJRF - Si no esta nulo hacemos lo siguiente
            {
                if (DtPendientesPorProgramar.Rows.Count > 0)//FJRF - Si tiene registros hacemos lo siguiente
                {
                    DtgPendientesPorProgramar.Columns[0].Visibility = Visibility.Hidden;
                    DtgPendientesPorProgramar.Columns[2].Visibility = Visibility.Hidden;
                    DtgPendientesPorProgramar.Columns[4].Visibility = Visibility.Hidden;
                }
            }

            #endregion

            Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Pone el cursor de forma normal
        }
        protected void PttV_Imprimir()
        {
            try//FJRF - Validamos el proceso de impresionrptResumenPorLinea.rpt
            {
                String StrRutaReporteAImprimir = StrRutaReporteCrystalReport + "rptInformePendientesPorProgramar1.rpt";//FJRF - Armamos la ruta completa donde estara el reporte
                if (System.IO.File.Exists(StrRutaReporteAImprimir) == true)//FJRf - Si el reporte existe hacemos lo siguiente
                {
                    #region FJRF - ImprimimosElReporte
                    if (DtPendientesPorProgramar == null)//FJRF - Validamos que el reporte tenga datos para realizar el proceso de impresion
                    {
                        Msgbox("PROCESO CANCELADO", "No existen datos para imprimir el reporte", MessageBoxButton.OK, MessageBoxImage.Error); //FJRF - Informamos al usuario
                    }
                    else//FJRF - Si trae datos hacemos lo siguiente
                    {
                        CargarParametrosImpresion();//FJRF - Cargamos los parametros para la impresion, esto contiene titulo y parametros enviados al cystalreport

                        DsImprimir = new DataSet("DsInformePendientesPorProgramar");//FJRF - DataSet que esta vinculado al CrystalReport

                        //FJRF - ADICIONAMOS LAS TABLAS QUE NECESITE EL DATASET ASOCIADO AL CRYSTAL
                        DsImprimir.Tables.Add(DtEncabezadoYParametros.Copy());//Encabezado Informe

                        DtPendientesPorProgramar.TableName = "DtDatosReporte";//FJRF - Le damos nombre a la tabla
                        DsImprimir.Tables.Add(DtPendientesPorProgramar.Copy());//Detalle del Informe

                        produccion.reportes.Vista vista = new produccion.reportes.Vista { ds = DsImprimir, reporte = StrRutaReporteAImprimir };//FJRF - Enviamos los datos para que se imprima el reporte
                        vista.Show();//FJRF - Ejecutamos el reporte para que se muestre visualmente
                    }
                    #endregion
                }
                else//FJRF - Si el reporte no existe hacemos lo siguiente
                {
                    Msgbox("PROCESO CANCELADO", "El reporte no existe en la ruta: [" + StrRutaReporteAImprimir + "] por favor comuniquese con el administrador del sistema para que corriga este inconveniente.", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                }
            }
            catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO - [Error del sistema]", ex.Message.ToString(), MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
            }
        }
        private void CargarParametrosImpresion()
        {
            #region FJRF - CreamosLasColmnasDelEncabezado
            DtEncabezadoYParametros = new DataTable("DtEncabezadoYParametros");//FJRF - Creamos la tabla que contendra el encabezado del informe

            //FJRF - CREAMOS LAS COLUMNAS DE LOS PARAMETROS A ENVIAR
            DtEncabezadoYParametros.Columns.Add("Empresa", System.Type.GetType("System.String"));//FJRF - Este es el nombre de la empresa
            DtEncabezadoYParametros.Columns.Add("TituloReporte", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("FechaDesde", System.Type.GetType("System.DateTime"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("FechaHasta", System.Type.GetType("System.DateTime"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("CodigoCliente", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("NombreCliente", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("CodigoReferencia", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("NombreReferencia", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("Colores", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("SeparaClientes", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("SeparaPedidos", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("ProyectarEnPlanta", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            #endregion

            #region FJRF - AsignamosEnLasColmnasDelEncabezadoLosValores

            DataRow drEncabezadoYParametros;//FJRF - Creamos un manejador de filas para el DataTable actual

            drEncabezadoYParametros = DtEncabezadoYParametros.NewRow();//FJRF - Agregamos una nueva fila
            //FJRF - ASIGNAMOS LOS VALORES
            drEncabezadoYParametros["Empresa"] = MDOgeneral.strEmpresaImprime;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["TituloReporte"] = "INFORME DE PENDIENTES POR PROGRAMAR";//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["FechaDesde"] = DtpFechaInicial.SelectedDate;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["FechaHasta"] = DtpFechaFinal.SelectedDate;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["CodigoCliente"] = CboCodigoCliente.Text;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["NombreCliente"] = CboNombreCliente.Text;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["CodigoReferencia"] = TxtCodigoReferencia.Text;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["NombreReferencia"] = LblTituloNombreReferencia.Content;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["Colores"] = StrColores;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["SeparaClientes"] = StrSelecciondoSepararClientes;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["SeparaPedidos"] = StrSelecciondoSepararPedidos;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["ProyectarEnPlanta"] = "S";//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            DtEncabezadoYParametros.Rows.Add(drEncabezadoYParametros);//FJRF - Agregamos a la tabla el registro creado
            DtEncabezadoYParametros.TableName = "DtEncabezadoYParametros";//FJRF - Le damos un nombre a la tabla creada para poder verla en el DataSet

            #endregion
        }
        protected void PttV_Salir()
        {
            this.Close();
        }
        protected void PttV_BuscarReferencia()
        {
            FrmAyudasGenericas FrmAyudas = new FrmAyudasGenericas();//FJRF - Creamos una variable que maneje las propiedades del formulario que vamos a invocar
            FrmAyudas.pStrTituloVentana_Opcional = "CONSULTA DE REFERENCIAS";//FJRF - Le enviamos un titulo personalizado al formulario

            StrConsulta = "SELECT ";//FJRF - Seleccionamos
            StrConsulta = StrConsulta + "UPPER(CODREF_REF) AS CODIGO, UPPER(NOMREF_REF) as NOMBRE ";//FJRF - Los campos
            StrConsulta = StrConsulta + "FROM MAEREF  ";//FJRF - Las tablas
            StrConsulta = StrConsulta + "ORDER BY NOMREF_REF ";//FJRF - Ordenamos la consulta

            FrmAyudas.pStrConsultaSql_Obligatorio = StrConsulta;//FJRF - Armamos la consulta
            FrmAyudas.pStrCampoCodigoDeLaTabla_Obligatorio = "CODIGO";//FJRF - Le decimos que este es el campo codigo o llave debe tener el nombre final osea el alias si es q lo tiene
            FrmAyudas.pStrBuscarPorDefectoEnElCampo_Opcional = "NOMBRE";//FJRF - Asignamos el dato a buscar

            FrmAyudas.ShowDialog();//FJRF - Invocamos el formulario

            if (FrmAyudas.DtDatosRetornados == null)//FJRF - Si no trae nada hacemos lo siguiente
            {
                TxtCodigoReferencia.Text = "";//FJRF - Retornamos vacio
                LblTituloNombreReferencia.Content = "";//FJRF - Retornamos vacio

                TxtCodigoReferencia.Focus();//FJRF - Ponemos el foco en la referencia
            }
            else//FJRF - Si trae datos entonces hacemos lo siguiente
            {
                if (FrmAyudas.DtDatosRetornados.Rows.Count > 0)//FJRF - Si el objeto trae filas entonces hacemos lo siguiente
                {
                    TxtCodigoReferencia.Text =  FrmAyudas.DtDatosRetornados.Rows[0]["CODIGO"].ToString();//FJRF - Buscamos el dato seleccionado;
                    LblTituloNombreReferencia.Content = FrmAyudas.DtDatosRetornados.Rows[0]["NOMBRE"].ToString();//FJRF - Buscamos el dato seleccionado;

                    BtnProcesar.Focus();//FJRF - Mandamos el foco para q procese los datos
                }
                else//FJRF - Si no es nulo pero no trae filas hacemos lo siguiente
                {
                    TxtCodigoReferencia.Text = "";//FJRF - Retornamos vacio
                    LblTituloNombreReferencia.Content = "";//FJRF - Retornamos vacio

                    TxtCodigoReferencia.Focus();//FJRF - Ponemos el foco en la referencia
                }
            }
        }

        #region FJRF - CargarCombosDejandoUnEspacioEnBlanco
        private Boolean CargarCombo(ComboBox CboComboACargar, string strConsultaOracle, string strSelectedValuePath, string strDisplayMemberPath, string strCodigoNombre)
        {
            Boolean BooSiHayDatos = false;//FJRF - Variable para informar si hay datos o no
            CboComboACargar.ItemsSource = null;
            CboComboACargar.Items.Clear();//FJRF - Borramos los posibles datos que pueda tener el combo

            DtConsulta = new DataTable();//FJRF - Inicializamos la variable
            DsConsulta = new DataSet();//FJRF - Inicializamos la variable

            DtConsulta = MdoGeneral.consulta(strConsultaOracle);//FJRF - Realizamos la consulta y retornamos los datos

            if (DtConsulta.Rows.Count > 0)//FJRF - Si hay datos llenar el combo
            {
                BooSiHayDatos = true;//FJRF - Informamos que hay datos

                DataRow drEncabezado;
                drEncabezado = DtConsulta.NewRow();

                if (strCodigoNombre == "Codigo")
                {
                    drEncabezado[strSelectedValuePath] = "ZZZ999";
                    drEncabezado[strDisplayMemberPath] = "TODOS";
                }
                if (strCodigoNombre == "Nombre")
                {
                    drEncabezado[strSelectedValuePath] = "ZZZ999";
                    drEncabezado[strDisplayMemberPath] = "TODOS";
                }

                DtConsulta.Rows.Add(drEncabezado);

                DsConsulta.Tables.Add(DtConsulta);//FJRF - Adicionameos el datatable al dataset
                CboComboACargar.ItemsSource = DsConsulta.Tables[0].DefaultView;//FJRF - Cargamos los datos encontrados
                CboComboACargar.SelectedValuePath = strSelectedValuePath.ToUpper();//FJRF - Cargamos la posicion
                CboComboACargar.DisplayMemberPath = strDisplayMemberPath.ToUpper();//FJRF - Decimos cual dato se mostrara

                CboComboACargar.SelectedValue = "ZZZ999";//FJRF - Ponemos el combo en la primera posicion
            }
            return BooSiHayDatos;//FJRF - Avisamos que si hay o no hay datos
        }
        #endregion

        private void TxtCodigoReferencia_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_LimpiarGrids();//Limpiamos los dos grid

            if (TxtCodigoReferencia.Text.Trim().Length == 4)//FJRF - Si tiene cuatro caracteres hacemos lo siguiente
            {
                LblTituloNombreReferencia.Content = MdoGeneral.StrRetornarUnSoloCampo("NOMREF_REF", "NOMBRE", "MAEREF", "CODREF_REF = '"+ TxtCodigoReferencia.Text.Trim().ToUpper() +"' ");

                StrConsulta = "select distinct codcol_pro as CODIGO, nomcol_col as COLOR, 'SI' as SELECCIONADO, '/produccion;component/Images/ok1.png' AS SELECCIONAR ";//FJRF - Armamos lo consulta
                StrConsulta = StrConsulta + "from USU_DBA.maepro ";//FJRF - Armamos lo consulta
                StrConsulta = StrConsulta + "inner join USU_DBA.maecol on codcol_pro=codcol_col ";//FJRF - Armamos lo consulta_PreviewMouseUp
                StrConsulta = StrConsulta + "where codref_pro='" + TxtCodigoReferencia.Text + "' Order by nomcol_col ";//FJRF - Armamos lo consulta

                DtColores = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos
                DtgColor.ItemsSource = DtColores.DefaultView;//FJRF - Cargamos los datos
            }
            else//FJRF - Si no tiene 4 caracteres
            {
                DtgColor.ItemsSource = null;//FJRF - Desvinculamos el objeto
                DtgColor.Items.Clear();//FJRF - Limpiamos el grid

                DtColores = null;//FJRF - Limpiamos la tabla
                LblTituloNombreReferencia.Content = "";//FJRF - Limpiamos el nombre
            }
            PonerImagen(TxtCodigoReferencia.Text.Trim(), "", LblTituloNombreReferencia.Content.ToString());//FJRF - Buscamos la imagen
        }

        #region FJRF - PonerFoto

        String StrCodigoPrimerColorReferencia = "";//FJRF - Para el primer color de la referencia
        private void PonerImagen(string strCodigoReferencia, string strCodigoColor, string strNombreReferencia)
        {
            if (String.IsNullOrEmpty(strCodigoColor))
            {
                BitmapImage b = new BitmapImage();
                if (File.Exists(MDOgeneral.Fotos_BOSI + strCodigoReferencia + ".jpg"))
                {
                    b.BeginInit();
                    b.UriSource = new Uri(MDOgeneral.Fotos_BOSI + strCodigoReferencia + ".jpg");
                    b.EndInit();
                    imgFoto.Stretch = Stretch.Fill;
                    imgFoto.Source = b;
                    ImagenTooltip.Source = b;
                    txbNombreImagen.Text = strNombreReferencia;
                }
                else
                {
                    imgFoto.Source = null;
                }
            }
            else
            {
                BitmapImage b = new BitmapImage();
                if (File.Exists(MDOgeneral.Fotos_BOSI + strCodigoReferencia + strCodigoColor + ".jpg"))
                {
                    b.BeginInit();
                    b.UriSource = new Uri(MDOgeneral.Fotos_BOSI + strCodigoReferencia + strCodigoColor + ".jpg");
                    b.EndInit();
                    imgFoto.Stretch = Stretch.Fill;
                    imgFoto.Source = b;
                    ImagenTooltip.Source = b;
                    txbNombreImagen.Text = strNombreReferencia;
                }
                else
                {
                    if (File.Exists(MDOgeneral.Fotos_BOSI + strCodigoReferencia + StrCodigoPrimerColorReferencia + ".jpg"))
                    {
                        b.BeginInit();
                        b.UriSource = new Uri(MDOgeneral.Fotos_BOSI + strCodigoReferencia + StrCodigoPrimerColorReferencia + ".jpg");
                        b.EndInit();
                        imgFoto.Stretch = Stretch.Fill;
                        imgFoto.Source = b;
                        ImagenTooltip.Source = b;
                        txbNombreImagen.Text = strNombreReferencia;
                    }
                    else
                    {
                        Boolean BooExiste = false;
                        //Foto para cualquier color-Consultar colores para referencia
                        clases.CLSMAEPRO mae = new clases.CLSMAEPRO { CODREF_PRO = strCodigoReferencia };
                        DataTable val = mae.BuscarColor();

                        foreach (DataRow r in val.Rows)
                        {
                            if (!String.IsNullOrEmpty(r["Codigo"].ToString()))
                            {
                                string StrRuta = MDOgeneral.Fotos_BOSI + strCodigoReferencia + r["Codigo"].ToString() + ".jpg";
                                if (File.Exists(StrRuta))
                                {
                                    BitmapImage BitFoto = new BitmapImage();
                                    BitFoto.BeginInit();
                                    BitFoto.UriSource = new Uri(StrRuta);
                                    BitFoto.EndInit();
                                    imgFoto.Source = BitFoto;
                                    ImagenTooltip.Source = BitFoto;
                                    txbNombreImagen.Text = strNombreReferencia;

                                    BooExiste = true;

                                    break;//FJRF - Si la encontro nos salimos
                                }
                            }
                        }

                        if (BooExiste == false)
                        {
                            imgFoto.Source = null;
                        }
                    }
                }
            }
        }

        #endregion

        #region FJRF - CajaDeTextoMsgbox
        protected void Msgbox(String StrCaption, String StrMensaje, MessageBoxButton MsbTipoBoton, MessageBoxImage MsbTipoImagenIcono)
        {
            MessageBoxButton buttons;
            buttons = MsbTipoBoton;

            MessageBoxImage icon = MsbTipoImagenIcono;
            MessageBox.Show(StrMensaje, StrCaption, buttons, icon);
        }
        #endregion

        private void Ejecutar_SP_INFPENPRG(string strCodigoClienteInicial, string strCodigoClienteFinal, string strCodigoReferenciaInicial, string strCodigoReferenciaFinal, string strCodigoColorInicial, string strCodigoColorFinal, string strFechaInicial, string strFechaFinal, string strSepararClientes, string strSepararPedidos, string strVerCalzadoOAccesorios)//FJRF - Este procedimiento ejecuta un sp
        {
            try
            {
                MDOgeneral.spComando.CommandText = "SP_INFPENPRG";
                MDOgeneral.spComando.Connection = MDOgeneral.conexion;
                MDOgeneral.spComando.CommandType = CommandType.StoredProcedure;
                MDOgeneral.spComando.Parameters.Clear();

                //Input
                MDOgeneral.spComando.Parameters.Add("pva_cliini", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strCodigoClienteInicial;
                MDOgeneral.spComando.Parameters.Add("pva_clifin", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strCodigoClienteFinal;

                MDOgeneral.spComando.Parameters.Add("pva_refini", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strCodigoReferenciaInicial;
                MDOgeneral.spComando.Parameters.Add("pva_reffin", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strCodigoReferenciaFinal;

                MDOgeneral.spComando.Parameters.Add("pva_colini", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strCodigoColorInicial;
                MDOgeneral.spComando.Parameters.Add("pva_colfin", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strCodigoColorFinal;

                MDOgeneral.spComando.Parameters.Add("pva_sepped", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strSepararPedidos;
                MDOgeneral.spComando.Parameters.Add("pva_sepcli", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strSepararClientes;

                MDOgeneral.spComando.Parameters.Add("pdt_desde", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strFechaInicial;
                MDOgeneral.spComando.Parameters.Add("pdt_hasta", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strFechaFinal;

                MDOgeneral.spComando.Parameters.Add("pva_tiplin", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strVerCalzadoOAccesorios;
                
                //Output salidas
                MDOgeneral.spComando.Parameters.Add("pva_result", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                MDOgeneral.spComando.Parameters.Add("pva_errusu", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                MDOgeneral.spComando.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString(), "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Pone el cursor de forma normal
            }
        }
        protected void PttV_BuscarDetalleDatoSeleccionado(string strNroPedido, string strCodigoCliente, string strNombreClienteCompleto, string strCodigoReferencia, string strNombreReferenciaCompleto, string strCodigoColor, int IntFilaIndexada, int IntColumnaIndexada)
        {
            #region FJRF - ESTABLECEMOS EL NOMBRE DEL PROCESO Y LA CANTIDAD
            
            String StrCodigoProceso = "", StrNombreProceso = "", StrCantidad = "0";//FJRF - Creamos las variables sin asignacion
            int IntColumna = 0;

            if (IntColumnaIndexada < 8)//FJRF - Si es menor a 8 hacemos lo siguiente
            {
                StrCodigoProceso = "PED";//FJRF - Asignamos PEDIDO
                StrNombreProceso = "PEDIDA";//FJRF - Ponemos el nombre del proceso

                IntColumna = 7;//FJRF - Enviamos la columna del pedido
            }
            else//FJRF - Si es mayor a 8 hacemos lo siguiente
            {
                if (IntColumnaIndexada == 8)
                {
                    StrCodigoProceso = "PRG";//FJRF - Asignamos PROGRAMADO
                    StrNombreProceso = "PROGRAMAR";//FJRF - Ponemos el nombre del proceso

                    IntColumna = IntColumnaIndexada;//FJRF - Decimos donde entro
                }
                if (IntColumnaIndexada == 9)
                {
                    StrCodigoProceso = "COR";//FJRF - Asignamos CORTADO
                    StrNombreProceso = "CORTAR";//FJRF - Ponemos el nombre del proceso

                    IntColumna = IntColumnaIndexada;//FJRF - Decimos donde entro
                }
                if (IntColumnaIndexada == 10)
                {
                    StrCodigoProceso = "PRP";//FJRF - Asignamos PREPARACION
                    StrNombreProceso = "PREPARACION";//FJRF - Ponemos el nombre del proceso

                    IntColumna = IntColumnaIndexada;//FJRF - Decimos donde entro
                }
                if (IntColumnaIndexada == 11)
                {
                    StrCodigoProceso = "GUA";//FJRF - Asignamos GUARNECIDA
                    StrNombreProceso = "GUARNECER";//FJRF - Ponemos el nombre del proceso

                    IntColumna = IntColumnaIndexada;//FJRF - Decimos donde entro
                }
                if (IntColumnaIndexada == 12)
                {
                    StrCodigoProceso = "MON";//FJRF - Asignamos MONTAJE
                    StrNombreProceso = "MONTAR";//FJRF - Ponemos el nombre del proceso

                    IntColumna = IntColumnaIndexada;//FJRF - Decimos donde entro
                }
                if (IntColumnaIndexada == 13)
                {
                    StrCodigoProceso = "DES";//FJRF - Asignamos DESPACHO
                    StrNombreProceso = "DESPACHAR";//FJRF - Ponemos el nombre del proceso

                    IntColumna = IntColumnaIndexada;//FJRF - Decimos donde entro
                }
            }
            if (DtPendientesPorProgramar != null)
            {
                if (DtPendientesPorProgramar.Rows.Count > 0)
                {
                    StrCantidad = DtPendientesPorProgramar.Rows[IntFilaIndexada][IntColumna].ToString();
                }
            }

            #endregion

            #region FJRF - PONEMOS EL TITULO DEL GRID DE DETALLE

            if (StrNombreProceso == "PEDIDA")
            {
                LblTituloDetalleSeleccionado.Content = "[ CANTIDAD " + StrNombreProceso + ": " + StrCantidad + " ] --- [ CLIENTE: " + strNombreClienteCompleto + " ] ";//FJRF - Informamos el dato seleccionado
            }
            else
            {
                LblTituloDetalleSeleccionado.Content = "[ PROCESO POR " + StrNombreProceso + " ] --- [ CANTIDAD: " + StrCantidad + " ] --- [ CLIENTE: " + strNombreClienteCompleto + " ] ";//FJRF - Informamos el dato seleccionado
            }

            #endregion

            //FJRF - REFERENCIA
            StrConsulta = "SELECT UPPER(TRIM(CODREF_TMP)) || UPPER(TRIM(CODCOL_TMP)) AS CODIGO, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "UPPER(TRIM(NOMREF_TMP)) || ' - ' || UPPER(TRIM(NOMCOL_TMP)) AS REFERENCIA, ";//FJRF - Armamos la consulta
            //FJRF - TALLAS
            StrConsulta = StrConsulta + "T1_TMP AS T1, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T2_TMP AS T2, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T3_TMP AS T3, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T4_TMP AS T4, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T5_TMP AS T5, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T6_TMP AS T6, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T7_TMP AS T7, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T8_TMP AS T8, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T9_TMP AS T9, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T10_TMP AS T10, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T11_TMP AS T11, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T12_TMP AS T12, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T13_TMP AS T13, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T14_TMP AS T14, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T15_TMP AS T15, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T16_TMP AS T16, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T17_TMP AS T17, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T18_TMP AS T18, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T19_TMP AS T19, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "T20_TMP AS T20, ";//FJRF - Armamos la consulta

            StrConsulta = StrConsulta + "TOT_TMP AS TOTAL, ";//FJRF - Armamos la consulta
            //FJRF - DATOS PARA FILTRAR
            StrConsulta = StrConsulta + "CODCLI_TMP AS CODIGOCLIENTE, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "NROPED_TMP AS NROPEDIDO, ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "CODPRC_TMP AS PROCESO, ";//FJRF - Armamos la consulta
            //FJRF - TALLAJE
            StrConsulta = StrConsulta + "CODTAL_TMP AS TALLAJE ";//FJRF - Armamos la consulta
            //FJRF - TABLA
            StrConsulta = StrConsulta + "FROM TMPINFPENPRG1 ";//FJRF - Armamos la consulta
            //FJRF - CONDICION
            StrConsulta = StrConsulta + "WHERE CODREF_TMP = '" + strCodigoReferencia + "' ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "AND CODCOL_TMP = '" + strCodigoColor + "' ";//FJRF - Armamos la consulta

            StrConsulta = StrConsulta + "AND CODPRC_TMP = '" + StrCodigoProceso + "' ";//FJRF - Armamos la consulta

            if (CkbSepararClientes.IsChecked == true)//FJRF - Si esta habilitada esta opcion hacemos lo siguiente
            {
                StrConsulta = StrConsulta + "AND CODCLI_TMP = '" + strCodigoCliente + "' ";//FJRF - Armamos la consulta
            }

            if (CkbSepararPedidos.IsChecked == true)//FJRF - Si esta habilitada esta opcion hacemos lo siguiente
            {
                StrConsulta = StrConsulta + "AND NROPED_TMP = '" + strNroPedido + "' ";//FJRF - Armamos la consulta
            }
            
            //FJRF - ORDENAMIENTO
            StrConsulta = StrConsulta + "ORDER BY NOMREF_TMP, NOMCOL_TMP ";//FJRF - Armamos la consulta

            DtDetalle = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos
            DtgDetalle.ItemsSource = DtDetalle.DefaultView;//FJRF - Cargamos los datos consultados

            if (DtDetalle != null)//FJRF - Si no esta nulo hacemos lo siguiente
            {
                if (DtDetalle.Rows.Count > 0)//FJRF - Si tiene registros hacemos lo siguiente
                {
                    String StrTallaje = DtDetalle.Rows[0][26].ToString();//FJRF - Extraemos el tallaje

                    DtgDetalle.Columns[23].Visibility = Visibility.Hidden;
                    DtgDetalle.Columns[24].Visibility = Visibility.Hidden;
                    DtgDetalle.Columns[25].Visibility = Visibility.Hidden;
                    DtgDetalle.Columns[26].Visibility = Visibility.Hidden;

                    
                    MdoGeneral.ModificarTallasTituloGrid(DtgDetalle, StrTallaje, 2);//FJRF - Modificamos el titulo de las tallas
                    PttV_DarFormatoColumnasGrid(DtgDetalle);//FJRF - Ponemos formato a las columnas
                }
            }

        }
        protected void PttV_DarFormatoColumnasGrid(DataGrid Dtg)
        {
            if (Dtg.Items.Count > 0)//FJRF - Si el grid tiene datos hacemos lo siguiente
            {
                foreach (var ColumnaGrid in Dtg.Columns)//FJRF - Recorremos el grid
                {
                    string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
                    strNombreColumna = Dtg.Columns[ColumnaGrid.DisplayIndex].Header.ToString();//FJRF - Extraemos el titulo que tenga la columna

                    #region FJRF - Damos formato a las columnas antes de quitarlas
                    if (strNombreColumna == "T1" || strNombreColumna == "T2" || strNombreColumna == "T3" || strNombreColumna == "T4" || strNombreColumna == "T5" || strNombreColumna == "T6" || strNombreColumna == "T7" || strNombreColumna == "T8" || strNombreColumna == "T9" || strNombreColumna == "T10" || strNombreColumna == "T1" || strNombreColumna == "T2" || strNombreColumna == "T13" || strNombreColumna == "T14" || strNombreColumna == "T15" || strNombreColumna == "T16" || strNombreColumna == "T17" || strNombreColumna == "T18" || strNombreColumna == "T19" || strNombreColumna == "T20" || strNombreColumna == "TOTAL")//FJRF - Si alguna de las columnas tiene este nombre hacemos lo siguiente
                    {
                        Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
                        MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

                        (ColumnaGrid as DataGridTextColumn).Binding.StringFormat = "{0:##,0;-##,0;  }";//FJRF - Enviamos el formato a la celda pero dejando un blanco si no tiene cero
                        (ColumnaGrid as DataGridTextColumn).CellStyle = MyStyleTextAlignmentProperty;//FJRF - Asignamos el estilo creado
                    }
                    #endregion

                    (ColumnaGrid as DataGridTextColumn).IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
                }
            }

        }
        #endregion

    }
}
